﻿/**
 * @file PhyscisPropRibbedWapper.h
 * @brief 加筋板物理属性 相关的python接口
 * @author wangning (2185896382@qq.com)
 * @date 2024-12-03
 */
#ifndef _PY_SEA_PHYSCISPROPRibbed_WAPPER_H___
#define _PY_SEA_PHYSCISPROPRibbed_WAPPER_H___

#include <QString>
#include <QObject>
#include "PythonInterfaceAPI.h"
#include "FITK_Component/FITKAcousticsPhysics/PyFITKPhyscisPropRibbed.h"

class Ribbed : public Acoustics::PyFITKPhyscisPropRibbed
{
public:
    explicit Ribbed(const QString& name);
    explicit Ribbed();
    virtual ~Ribbed() = default;
};

/**
 * @brief 加筋板物理属性相关PYTHON接口装饰
 * @author wangning (2185896382@qq.com)
 * @date 2024-12-03
 */
class PythonInterfaceAPI PhyscisPropRibbedWapper : public QObject
{
    Q_OBJECT
public slots:
    Ribbed* new_Ribbed();

    void delete_Ribbed(Ribbed* obj);
    /**
     * @brief 在Python解释器中通过名称获取对象
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    Ribbed* static_Ribbed_GetRibbed(const QString& name);
    /**
     * @brief 获取名称
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    QString getName(Ribbed* obj);
    /**
     * @brief 设置名称
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    void setName(Ribbed* obj, const QString& name);
    /**
     * @brief  设置第一条筋
     * @param[i] beam :梁
     * @param[i] spacing :加筋间距
     * @param[i] dev：  标准差
     * @param[i] offset :加筋梁截面中心偏移
     * @param[i] orientation ：梁截面方向角度,0,90,180,270
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void setRibs_1(Ribbed* obj, const QString& beam, double spacing, double dev, double offset, double orientation);
    /**
     * @brief  设置第二条筋
     * @param[i] beam :梁
     * @param[i] spacing :加筋间距
     * @param[i] dev：  标准差
     * @param[i] offset :加筋梁截面中心偏移
     * @param[i] orientation ：梁截面方向角度,0,90,180,270
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void setRibs_2(Ribbed* obj, const QString& beam, double spacing, double dev, double offset, double orientation);
    /**
     * @brief  禁用第二条筋，禁用后，如果想启用第二条筋，需要重新设置一遍第二条筋的属性
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void disableRibs_2(Ribbed* obj);
    /**
     * @brief  设置角度
     * @param[i] angle :角度
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void setBaseAngle(Ribbed* obj, double angle);
    /**
     * @brief  设置基板
     * @param[i] skinName: 板名（包括均质板和多层板）
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void setSkinSection(Ribbed* obj, const QString& skinName);
    /**
     * @brief  创建物理属性
     * @param[i] name 名称
     * @author wangning (2185896382@qq.com)
     * @date   2024-12-03
     */
    void createPhyscisProp(Ribbed* obj, const QString& name);
};

#endif
